package com.cskaoyan.javase.oop1._15import._0one;

import com.cskaoyan.javase.oop1._15import._1another.Student;
import com.cskaoyan.javase.oop1._15import._1another.Teacher;

/**
 * one包下的测试类
 *
 * 在代码中写创建对象的语句,写调用方法,写访问成员变量等等
 * 这些语句都会经过编译器语法检查,
 * 编译器会去检查这个类是否存在,方法是否存在等.
 *
 * 所以这里就存在一个编译器上的概念,编译器在查找类时:
 *      会优先从同包中找,而且同包下绝无可能出现同名类
 *      这样,能找到这个类,编译就通过,找不到这个类,就会编译报错
 *
 * 但是如果想要去不同包下,使用某个类,因为不同包下完全可能出现同名类
 * 这时编译器是没有办法直接根据一个简单类名,得出要使用哪个类的
 *      所以,有两种解决办法:
 *      1.(推荐)使用import进行导包操作,告诉编译器使用哪个包下的这个类
 *          语法: import + 全限定类名
 *          位置: 在package声明下,有效代码之前
 *              一般来说,导包语句都建议紧跟package声明
 *     2.(不太推荐)不用简单类名,直接用全限定类名.
 *          但是一般来说,全限定类名都比较长,不建议这么用,除非迫不得已.
 *          比如又想用同包下的Student,又想用不同包下的Student
 *
 * 注意事项:
 *      1.import导包语句应该放在package声明之后，有效代码之前。
 *          正常情况下，我们使用某个类时，IDEA会自动导包，不用太关心这条语句的位置。
 *          一般只需要注意不要用IDEA导错包就可以了。
 *      2.像String、System、Math等常用类很明显不是同包下的类，但我们并没有进行导包操作。
 *          这是因为在Java当中的，"java.lang包"是Java的核心类包，具有隐式的导包。
 *          注意"java.lang包"下的所有类，是隐式的导入了每个Java类中，而不是没有导入！
 *      3.实际上完全可以不导包去使用不同包下类，这时要明确指出这个类的所属包，也就是要使用全限定类名。
 *          但是一般情况下，全限定类名都很长，导包仍然是更好的手段。
 *
 * @since 15:08
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        /*Student s = new Student();
        s.test();

        com.cskaoyan.javase.oop1._15import._1another.Student s2 =  new com.cskaoyan.javase.oop1._15import._1another.Student();
        s2.test();*/

        // new Teacher()

    }
}
